﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using BusinessLogicLayer;
using Equin.ApplicationFramework;

namespace PresentationLayer
{
    public partial class FormCapNhatThongTinOnSite : Form
    {
        public CapNhatOnSite PhuongThucCapNhatOS { get; set; }
        public string Maos { get; set; }
        private OnSite onsite;
        public NhanVien nv;
        private List<NhanVien> dsNVDaXoa = new List<NhanVien>();
        private List<NhanVien> dsNV;
        public FormCapNhatThongTinOnSite()
        {
            InitializeComponent();
        }
        public OnSite OnSite { get; set; }
        private bool kiemtra()
        {
            if (txtMaOnSite.Text == "")
            {
                MessageBox.Show("Chưa nhập mã On-Site", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            if (txtCongTy.Text == "")
            {
                MessageBox.Show("Chưa nhập công ty", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            if (txtDiaDiem.Text == "")
            {
                MessageBox.Show("Chưa nhập địa điểm", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            if (txtCongTy.Text == "")
            {
                MessageBox.Show("Chưa nhập công ty", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            if (dtiNgayBD.Value == DateTime.MinValue)
            {
                MessageBox.Show("Chưa chọn ngày bắt đầu!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                dtiNgayBD.Focus();
                return false;
            }
            if (dtiNgayKT.Value == DateTime.MinValue)
            {
                MessageBox.Show("Chưa chọn ngày kết thúc!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                dtiNgayKT.Focus();
                return false;
            }
            if (dtiNgayBD.Value.Date.CompareTo(dtiNgayKT.Value.Date) == 1)
            {
                MessageBox.Show("Ngày bắt đầu phải trước ngày kết thúc!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                dtiNgayBD.Focus();
                return false;
            }
            return true; ;

        }
        private OnSite TaoOnSite()
        {
            string maos = txtMaOnSite.Text;
            string congty = txtCongTy.Text;
            string diadiem = txtDiaDiem.Text;
            DateTime ngaybd = dtiNgayBD.Value;
            DateTime ngaykt = dtiNgayKT.Value;
            OnSite os = new OnSite() { MaOnSite = maos, CongTy = congty, DiaDiem = diadiem, NgayBD = ngaybd, NgayKT = ngaykt };
            return os;
        }
        private void btnCapNhatOnSite_Click(object sender, EventArgs e)
        {
            OnSite onsite = TaoOnSite();
            if (btnCapNhatOnSite.Text == "Thêm OnSite")
            {

                if (kiemtra())
                {
                    OnSiteManager osmanager = new OnSiteManager();
                    List<string> manv = LayDSMaNhanVienDuocChon();
                    List<NhanVien> listnv = new OnSiteManager().LayDSNhanVienTheoList(manv);

                    var kt = osmanager.ThemOnSite(onsite, listnv);
                    if (kt.Success)
                    {
                        var ar = new OnSiteManager().DoiTrangThaiThanhOnSite(LayDSMaNhanVienDuocChon());
                        if (PhuongThucCapNhatOS != null)
                            PhuongThucCapNhatOS(LoaiHanhDong.Them, onsite);
                        MessageBox.Show("Thêm thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else MessageBox.Show("Thêm thất bại:\nChi tiết" + kt.ToString(), "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }

            }
            else
            {
                if (kiemtra())
                {
                    List<string> dsMoi = LayDSMaNhanVienDuocChon();
                    foreach (var nv in dsNV)
                    {
                        if (!dsMoi.Contains(nv.MaNhanVien))
                            dsNVDaXoa.Add(nv);
                    }
                    OnSiteManager osmanager = new OnSiteManager();
                    List<string> manv = LayDSMaNhanVienDuocChon();
                    List<NhanVien> listnv = new OnSiteManager().LayDSNhanVienTheoList(manv);
                    var kt = osmanager.SuaOnSite(onsite, listnv);
                    if (kt.Success)
                    {
                        
                        var ar = new OnSiteManager().DoiTrangThaiThanhOnSite(LayDSMaNhanVienDuocChon());
                        if (PhuongThucCapNhatOS != null)
                            PhuongThucCapNhatOS(LoaiHanhDong.CapNhat, onsite);
                        osmanager.DoiTTNVKhiXoa(dsNVDaXoa);
                        MessageBox.Show("Cập nhật thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                        MessageBox.Show("Cập nhật không thành công!\nChi tiết:" + kt.ToString(), "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }
            }
        }
        private void ChonNhanThemVaoOnSite()
        {
            OnSiteManager os = new OnSiteManager();
            ActionResultAsList<NhanVien> ds = os.TimNhanVienTheoMa(nv.MaNhanVien);
            if (ds.Success)
            {
                foreach (DataGridViewRow row in dgvThemNV.Rows)
                {
                    string manv = row.Cells["MaNhanVien"].Value.ToString();
                    if (ds.ObjectList.Exists(k => k.MaNhanVien == manv))
                        row.Cells["Chon"].Value = true;
                }
            }
            else
                MessageBox.Show("Lỗi!", "error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        public List<string> LayDSMaNhanVienDuocChon()
        {
            List<string> list = new List<string>();
            foreach (DataGridViewRow row in dgvThemNV.Rows)
            {
                if (Convert.ToBoolean(row.Cells["Chon"].Value))
                    list.Add(row.Cells["MaNhanVien"].Value.ToString());
            }
            return list;
        }
        private void FormCapNhatThongTinOnSite_Load(object sender, EventArgs e)
        {
            if (OnSite.MaOnSite == null)
            {
                btnCapNhatOnSite.Text = "Thêm OnSite";
                btnThemNVVaoOnSite.Visible = false;
                ActionResultAsList<NhanVien> rsnv = new OnSiteManager().LayDSNVTheoTrangThai(TrangThaiNV.RanhRoi);
                if (rsnv.Success)
                {

                    dgvThemNV.AutoGenerateColumns = false;
                    dgvThemNV.DataSource = new BindingListView<NhanVien>(rsnv.ObjectList);

                    lblTongSoDongNV.Text = "Tổng số dòng: " + dgvThemNV.RowCount;
                }
                else
                    MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + rsnv.Exceptions[rsnv.Exceptions.Count - 1].Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                btnCapNhatOnSite.Text = "Sửa OnSite";
                txtMaOnSite.ReadOnly = true;
                var os = new OnSiteManager().TimKiemOnSiteTheoMa(Maos);
                onsite = os.ObjectList[0];
                txtMaOnSite.Text = onsite.MaOnSite;
                txtCongTy.Text = onsite.CongTy;
                txtDiaDiem.Text = onsite.DiaDiem;
                dtiNgayBD.Value = onsite.NgayBD;
                dtiNgayKT.Value = onsite.NgayKT;

                //Đưa nv vao dgThemNV
                ActionResultAsList<NhanVien> rsnv = new OnSiteManager().LayDSNhanVienTheoMaOnSite(Maos);
                if (rsnv.Success)
                {
                    dsNV = new OnSiteManager().LayDSNhanVienTheoMaOnSite(Maos).ObjectList;
                    dgvThemNV.AutoGenerateColumns = false;
                    dgvThemNV.DataSource = new BindingListView<NhanVien>(rsnv.ObjectList);
                    foreach (DataGridViewRow row in dgvThemNV.Rows)
                    {
                        row.Cells["Chon"].Value = true;
                    }
                    lblTongSoDongNV.Text = "Tổng số dòng: " + dgvThemNV.RowCount;
                }
                else
                    MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + rsnv.Exceptions[rsnv.Exceptions.Count - 1].Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }


        }
        private void dgvThemNV_Click(object sender, EventArgs e)
        {
            if (dgvThemNV.SelectedRows.Count > 0)
            {
                string manv = Convert.ToString(dgvThemNV.SelectedRows[0].Cells["MaNhanVien"].Value);
                ActionResultAsList<KyNang> rskn = new OnSiteManager().LayDSKyNangTheoMaNV(manv);
                dgvKyNangNV.AutoGenerateColumns = false;
                dgvKyNangNV.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
                dgvKyNangNV.DataSource = new BindingListView<KyNang>(rskn.ObjectList);
                lblTongSoDongKN.Text = "Tổng số dòng: " + dgvKyNangNV.RowCount;
            }
        }
        void form_FormClosing(object sender, FormClosingEventArgs e)
        {
            List<NhanVien> dsnv = (sender as FormThemNVVaoOnSite).DSNV;
            dgvThemNV.AutoGenerateColumns = false;
            dgvThemNV.DataSource = new BindingListView<NhanVien>(dsnv);
            foreach (DataGridViewRow row in dgvThemNV.Rows)
            {
                row.Cells["Chon"].Value = true;
            }
        }
        private void btnThemNVVaoOnSite_Click(object sender, EventArgs e)
        {
            List<NhanVien> l = (dgvThemNV.DataSource as BindingListView<NhanVien>).DataSource as List<NhanVien>;
            FormThemNVVaoOnSite form = new FormThemNVVaoOnSite();
            form.DSNV = l;
            form.FormClosing += form_FormClosing;
            form.ShowDialog();
        }
        List<string> listTemp;
        private void dgvThemNV_ColumnHeaderMouseClick_1(object sender, DataGridViewCellMouseEventArgs e)
        {
            
            foreach (DataGridViewRow row in dgvThemNV.Rows)
            {

                string maNV = row.Cells["MaNhanVien"].Value.ToString();
                if (listTemp.Contains(maNV))
                    row.Cells["Chon"].Value = true;
            }
            //dgvThemNV.Refresh();
        }
        private void dgvThemNV_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            btnCapNhatOnSite.Focus();
            listTemp = LayDSMaNhanVienDuocChon();
        }

    }
}
